μ΅μ μ νμ μ€ν¬λ¦½νΈ κ°λ°μ μν tsconfig.json νμΌ μ΄ν΄ λ° μ€μ μ’ ν© κ°μ΄λ. κ³ κΈ μ»΄νμΌλ¬ μ΅μ κ³Ό λͺ¨λ² μ¬λ‘λ₯Ό λ€λ£Ήλλ€.
TypeScript μ€μ : TSConfig μ»΄νμΌλ¬ μ΅μ λ§μ€ν°νκΈ°
tsconfig.json νμΌμ λͺ¨λ νμ
μ€ν¬λ¦½νΈ νλ‘μ νΈμ ν΅μ¬μ
λλ€. μ΄ νμΌμ νμ
μ€ν¬λ¦½νΈ μ»΄νμΌλ¬(tsc)κ° .ts νμΌμ μλ°μ€ν¬λ¦½νΈλ‘ λ³ννλ λ°©λ²μ μ§μ ν©λλ€. μ ꡬμ±λ tsconfig.jsonμ μ½λ νμ§μ μ μ§νκ³ , λ€μν νκ²½ κ°μ νΈνμ±μ 보μ₯νλ©°, λΉλ νλ‘μΈμ€λ₯Ό μ΅μ ννλ λ° λ§€μ° μ€μν©λλ€. μ΄ μ’
ν© κ°μ΄λλ κ³ κΈ tsconfig.json μ΅μ
μ μ¬μΈ΅μ μΌλ‘ λ€λ£¨μ΄, νμ
μ€ν¬λ¦½νΈ νλ‘μ νΈλ₯Ό μ΅κ³ μ μ±λ₯κ³Ό μ μ§λ³΄μμ±μ μν΄ λ―ΈμΈ μ‘°μ ν μ μλλ‘ λμλ립λλ€.
κΈ°λ³Έ μ¬ν μ΄ν΄νκΈ°: TSConfigκ° μ€μν μ΄μ
κ³ κΈ μ΅μ
μ μ΄ν΄λ³΄κΈ° μ μ, tsconfig.jsonμ΄ μ μ€μνμ§ μμ½ν΄ λ³΄κ² μ΅λλ€:
- μ»΄νμΌ μ μ΄: νλ‘μ νΈμ ν¬ν¨λ νμΌκ³Ό μ»΄νμΌ λ°©λ²μ μ§μ ν©λλ€.
- νμ κ²μ¬: νμ κ²μ¬μ κ·μΉκ³Ό μ격μ±μ μ μνμ¬ κ°λ° μ£ΌκΈ° μ΄κΈ°μ μ€λ₯λ₯Ό λ°κ²¬ν μ μλλ‘ λμ΅λλ€.
- μΆλ ₯ μ μ΄: λμ μλ°μ€ν¬λ¦½νΈ λ²μ , λͺ¨λ μμ€ν , μΆλ ₯ λλ ν 리λ₯Ό κ²°μ ν©λλ€.
- IDE ν΅ν©: μ½λ μμ±, μ€λ₯ κ°μ‘°, 리ν©ν λ§κ³Ό κ°μ κΈ°λ₯μ μν΄ IDE(VS Code, WebStorm λ±)μ μ€μν μ 보λ₯Ό μ 곡ν©λλ€.
tsconfig.json νμΌμ΄ μμΌλ©΄ νμ
μ€ν¬λ¦½νΈ μ»΄νμΌλ¬λ κΈ°λ³Έ μ€μ μ μ¬μ©νλλ°, μ΄λ λͺ¨λ νλ‘μ νΈμ μ ν©νμ§ μμ μ μμ΅λλ€. μ΄λ‘ μΈν΄ μκΈ°μΉ μμ λμ, νΈνμ± λ¬Έμ , μ΄μμ μ΄μ§ μμ κ°λ° κ²½νμ΄ λ°μν μ μμ΅λλ€.
TSConfig μμ±νκΈ°: λΉ λ₯Έ μμ
tsconfig.json νμΌμ μμ±νλ €λ©΄, νλ‘μ νΈμ λ£¨νΈ λλ ν 리μμ λ€μ λͺ
λ Ήμ΄λ₯Ό μ€ννλ©΄ λ©λλ€:
tsc --init
μ΄ λͺ
λ Ήμ΄λ λͺ κ°μ§ μΌλ°μ μΈ μ΅μ
μ΄ ν¬ν¨λ κΈ°λ³Έ tsconfig.json νμΌμ μμ±ν©λλ€. κ·Έλ° λ€μ νλ‘μ νΈμ νΉμ μꡬμ¬νμ λ§κ² μ΄ νμΌμ μ¬μ©μ μ μν μ μμ΅λλ€.
μ£Όμ μ»΄νμΌλ¬ μ΅μ : μμΈ κ°μ
tsconfig.json νμΌμλ νμ
μ€ν¬λ¦½νΈ μ»΄νμΌλ¬λ₯Ό μ€μ νλ compilerOptions κ°μ²΄κ° ν¬ν¨λμ΄ μμ΅λλ€. κ°μ₯ μ€μνκ³ μΌλ°μ μΌλ‘ μ¬μ©λλ λͺ κ°μ§ μ΅μ
μ μ΄ν΄λ³΄κ² μ΅λλ€:
target
μ΄ μ΅μ
μ μ»΄νμΌλ μλ°μ€ν¬λ¦½νΈ μ½λμ ECMAScript λμ λ²μ μ μ§μ ν©λλ€. μ»΄νμΌλ¬κ° μ¬μ©ν μλ°μ€ν¬λ¦½νΈ κΈ°λ₯μ κ²°μ νμ¬ λμ νκ²½(μ: λΈλΌμ°μ , Node.js)κ³Όμ νΈνμ±μ 보μ₯ν©λλ€. μΌλ°μ μΈ κ°μΌλ‘λ ES5, ES6(ES2015), ES2017, ES2018, ES2019, ES2020, ES2021, ES2022, ESNextκ° μμ΅λλ€. ESNextλ₯Ό μ¬μ©νλ©΄ κ°μ₯ μ΅μ μ μ§μλλ ECMAScript κΈ°λ₯μ λμμΌλ‘ ν©λλ€.
μμ:
"compilerOptions": {
"target": "ES2020"
}
μ΄ μ€μ μ μ»΄νμΌλ¬κ° ECMAScript 2020κ³Ό νΈνλλ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μμ±νλλ‘ μ§μν©λλ€.
module
μ΄ μ΅μ
μ μ»΄νμΌλ μλ°μ€ν¬λ¦½νΈ μ½λμμ μ¬μ©ν λͺ¨λ μμ€ν
μ μ§μ ν©λλ€. μΌλ°μ μΈ κ°μΌλ‘λ CommonJS, AMD, System, UMD, ES6(ES2015), ES2020, ESNextκ° μμ΅λλ€. λͺ¨λ μμ€ν
μ μ νμ λμ νκ²½κ³Ό μ¬μ© μ€μΈ λͺ¨λ λ‘λ(μ: Node.js, Webpack, Browserify)μ λ°λΌ λ¬λΌμ§λλ€.
μμ:
"compilerOptions": {
"module": "CommonJS"
}
μ΄ μ€μ μ μΌλ°μ μΌλ‘ CommonJS λͺ¨λ μμ€ν μ μ¬μ©νλ Node.js νλ‘μ νΈμ μ ν©ν©λλ€.
lib
μ΄ μ΅μ
μ μ»΄νμΌ κ³Όμ μ ν¬ν¨λ λΌμ΄λΈλ¬λ¦¬ νμΌ μ§ν©μ μ§μ ν©λλ€. μ΄ λΌμ΄λΈλ¬λ¦¬ νμΌλ€μ λ΄μ₯ μλ°μ€ν¬λ¦½νΈ API λ° λΈλΌμ°μ APIμ λν νμ
μ μλ₯Ό μ 곡ν©λλ€. μΌλ°μ μΈ κ°μΌλ‘λ ES5, ES6, ES7, DOM, WebWorker, ScriptHost λ±μ΄ μμ΅λλ€.
μμ:
"compilerOptions": {
"lib": ["ES2020", "DOM"]
}
μ΄ μ€μ μ ECMAScript 2020κ³Ό DOM APIμ λν νμ μ μλ₯Ό ν¬ν¨νλ©°, μ΄λ λΈλΌμ°μ κΈ°λ° νλ‘μ νΈμ νμμ μ λλ€.
allowJs
μ΄ μ΅μ μ νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬κ° νμ μ€ν¬λ¦½νΈ νμΌκ³Ό ν¨κ» μλ°μ€ν¬λ¦½νΈ νμΌμ μ»΄νμΌνλλ‘ νμ©ν©λλ€. μ΄λ μλ°μ€ν¬λ¦½νΈ νλ‘μ νΈλ₯Ό νμ μ€ν¬λ¦½νΈλ‘ λ§μ΄κ·Έλ μ΄μ νκ±°λ κΈ°μ‘΄ μλ°μ€ν¬λ¦½νΈ μ½λλ² μ΄μ€μ ν¨κ» μμ ν λ μ μ©ν μ μμ΅λλ€.
μμ:
"compilerOptions": {
"allowJs": true
}
μ΄ μ΅μ
μ νμ±ννλ©΄ μ»΄νμΌλ¬λ .tsμ .js νμΌμ λͺ¨λ μ²λ¦¬ν©λλ€.
checkJs
μ΄ μ΅μ
μ μλ°μ€ν¬λ¦½νΈ νμΌμ λν νμ
κ²μ¬λ₯Ό νμ±νν©λλ€. allowJsμ ν¨κ» μ¬μ©νλ©΄, νμ
μ€ν¬λ¦½νΈκ° μλ°μ€ν¬λ¦½νΈ μ½λμ μ μ¬μ μΈ νμ
μ€λ₯λ₯Ό μλ³ν μ μκ² ν΄μ€λλ€.
μμ:
"compilerOptions": {
"allowJs": true,
"checkJs": true
}
μ΄ μ€μ μ νμ μ€ν¬λ¦½νΈμ μλ°μ€ν¬λ¦½νΈ νμΌ λͺ¨λμ λν΄ νμ κ²μ¬λ₯Ό μ 곡ν©λλ€.
jsx
μ΄ μ΅μ
μ JSX ꡬ문(React λ° λ€λ₯Έ νλ μμν¬μμ μ¬μ©)μ΄ μ΄λ»κ² λ³νλμ΄μΌ νλμ§λ₯Ό μ§μ ν©λλ€. μΌλ°μ μΈ κ°μΌλ‘λ preserve, react, react-native, react-jsxκ° μμ΅λλ€. preserveλ JSX ꡬ문μ κ·Έλλ‘ λκ³ , reactλ React.createElement νΈμΆλ‘ λ³ννλ©°, react-nativeλ React Native κ°λ°μ©μ΄κ³ , react-jsxλ JSX ν©ν 리 ν¨μλ‘ λ³νν©λλ€. react-jsxdevλ κ°λ° λͺ©μ μΌλ‘ μ¬μ©λ©λλ€.
μμ:
"compilerOptions": {
"jsx": "react"
}
μ΄ μ€μ μ React νλ‘μ νΈμ μ ν©νλ©°, JSXλ₯Ό React.createElement νΈμΆλ‘ λ³νν©λλ€.
declaration
μ΄ μ΅μ
μ νμ
μ€ν¬λ¦½νΈ μ½λμ λν μ μΈ νμΌ(.d.ts)μ μμ±ν©λλ€. μ μΈ νμΌμ μ½λμ λν νμ
μ 보λ₯Ό μ 곡νμ¬ λ€λ₯Έ νμ
μ€ν¬λ¦½νΈ νλ‘μ νΈλ μλ°μ€ν¬λ¦½νΈ νλ‘μ νΈκ° μ μ ν νμ
κ²μ¬λ₯Ό ν΅ν΄ μ½λλ₯Ό μ¬μ©ν μ μκ² ν΄μ€λλ€.
μμ:
"compilerOptions": {
"declaration": true
}
μ΄ μ€μ μ μ»΄νμΌλ μλ°μ€ν¬λ¦½νΈ νμΌκ³Ό ν¨κ» .d.ts νμΌμ μμ±ν©λλ€.
declarationMap
μ΄ μ΅μ
μ μμ±λ μ μΈ νμΌμ λν μμ€λ§΅ νμΌ(.d.ts.map)μ μμ±ν©λλ€. μμ€λ§΅μ μ¬μ©νλ©΄ λλ²κ±° λ° κΈ°ν λκ΅¬κ° μ μΈ νμΌλ‘ μμ
ν λ μλ³Έ νμ
μ€ν¬λ¦½νΈ μμ€ μ½λλ‘ λ€μ λ§€νν μ μμ΅λλ€.
μμ:
"compilerOptions": {
"declaration": true,
"declarationMap": true
}
sourceMap
μ΄ μ΅μ
μ μ»΄νμΌλ μλ°μ€ν¬λ¦½νΈ μ½λμ λν μμ€λ§΅ νμΌ(.js.map)μ μμ±ν©λλ€. μμ€λ§΅μ μ¬μ©νλ©΄ λΈλΌμ°μ λ λ€λ₯Έ νκ²½μμ λλ²κΉ
ν λ λλ²κ±° λ° κΈ°ν λκ΅¬κ° μλ³Έ νμ
μ€ν¬λ¦½νΈ μμ€ μ½λλ‘ λ€μ λ§€νν μ μμ΅λλ€.
μμ:
"compilerOptions": {
"sourceMap": true
}
outFile
μ΄ μ΅μ μ λͺ¨λ μΆλ ₯ νμΌμ μ°κ²°νμ¬ λ¨μΌ νμΌλ‘ λ΄λ³΄λ λλ€. μ΄λ μΌλ°μ μΌλ‘ λΈλΌμ°μ κΈ°λ° μ ν리μΌμ΄μ μ μν μ½λ λ²λ€λ§μ μ¬μ©λ©λλ€.
μμ:
"compilerOptions": {
"outFile": "dist/bundle.js"
}
outDir
μ΄ μ΅μ μ μ»΄νμΌλ μλ°μ€ν¬λ¦½νΈ νμΌμ μΆλ ₯ λλ ν 리λ₯Ό μ§μ ν©λλ€. μ§μ νμ§ μμΌλ©΄ μ»΄νμΌλ¬λ μμ€ νμΌκ³Ό λμΌν λλ ν 리μ μΆλ ₯ νμΌμ λ°°μΉν©λλ€.
μμ:
"compilerOptions": {
"outDir": "dist"
}
μ΄ μ€μ μ μ»΄νμΌλ μλ°μ€ν¬λ¦½νΈ νμΌμ dist λλ ν 리μ λ°°μΉν©λλ€.
rootDir
μ΄ μ΅μ μ νμ μ€ν¬λ¦½νΈ νλ‘μ νΈμ λ£¨νΈ λλ ν 리λ₯Ό μ§μ ν©λλ€. μ»΄νμΌλ¬λ μ΄ λλ ν 리λ₯Ό μ¬μ©νμ¬ λͺ¨λ μ΄λ¦μ ν΄μνκ³ μΆλ ₯ νμΌ κ²½λ‘λ₯Ό μμ±ν©λλ€. μ΄λ 볡μ‘ν νλ‘μ νΈ κ΅¬μ‘°μ νΉν μ μ©ν©λλ€.
μμ:
"compilerOptions": {
"rootDir": "src"
}
removeComments
μ΄ μ΅μ μ μ»΄νμΌλ μλ°μ€ν¬λ¦½νΈ μ½λμμ μ£Όμμ μ κ±°ν©λλ€. μ΄λ μΆλ ₯ νμΌμ ν¬κΈ°λ₯Ό μ€μ΄λ λ° λμμ΄ λ μ μμ΅λλ€.
μμ:
"compilerOptions": {
"removeComments": true
}
noEmitOnError
μ΄ μ΅μ μ νμ μ€λ₯κ° κ°μ§λ κ²½μ° μ»΄νμΌλ¬κ° μλ°μ€ν¬λ¦½νΈ νμΌμ λ΄λ³΄λ΄λ κ²μ λ°©μ§ν©λλ€. μ΄λ₯Ό ν΅ν΄ μ ν¨ν μ½λλ§ μμ±λλλ‘ λ³΄μ₯ν©λλ€.
μμ:
"compilerOptions": {
"noEmitOnError": true
}
strict
μ΄ μ΅μ μ λͺ¨λ μ격ν νμ κ²μ¬ μ΅μ μ νμ±νν©λλ€. μ μ¬μ μΈ μ€λ₯λ₯Ό μ‘μλ΄κ³ λͺ¨λ² μ¬λ‘λ₯Ό κ°μ νλ λ° λμμ΄ λλ―λ‘ μ νλ‘μ νΈμ κ°λ ₯ν κΆμ₯λ©λλ€.
μμ:
"compilerOptions": {
"strict": true
}
strict λͺ¨λλ₯Ό νμ±ννλ κ²μ λ€μ μ΅μ λ€μ νμ±ννλ κ²κ³Ό κ°μ΅λλ€:
noImplicitAnynoImplicitThisalwaysStrictstrictNullChecksstrictFunctionTypesstrictBindCallApplynoImplicitReturnsnoFallthroughCasesInSwitch
esModuleInterop
μ΄ μ΅μ μ CommonJSμ ES λͺ¨λ κ°μ μνΈ μ΄μ©μ±μ νμ±νν©λλ€. μ΄λ₯Ό ν΅ν΄ ES λͺ¨λμμ CommonJS λͺ¨λμ κ°μ Έμ¬ μ μκ³ κ·Έ λ°λλ κ°λ₯ν©λλ€.
μμ:
"compilerOptions": {
"esModuleInterop": true
}
forceConsistentCasingInFileNames
μ΄ μ΅μ μ νμΌ μ΄λ¦μ λμλ¬Έμ μΌκ΄μ±μ κ°μ ν©λλ€. μΌλΆ μ΄μ 체μ λ λμλ¬Έμλ₯Ό ꡬλΆνμ§λ§ λ€λ₯Έ μ΄μ 체μ λ κ·Έλ μ§ μκΈ° λλ¬Έμ ν¬λ‘μ€ νλ«νΌ νΈνμ±μ μ€μν©λλ€.
μμ:
"compilerOptions": {
"forceConsistentCasingInFileNames": true
}
baseUrl and paths
μ΄ μ΅μ
λ€μ λͺ¨λ ν΄μμ μ€μ ν μ μκ² ν΄μ€λλ€. baseUrlμ λΉμλμ λͺ¨λ μ΄λ¦μ ν΄μνκΈ° μν κΈ°λ³Έ λλ ν 리λ₯Ό μ§μ νκ³ , pathsλ μ¬μ©μ μ μ λͺ¨λ λ³μΉμ μ μν μ μκ² ν΄μ€λλ€.
μμ:
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@components/*": ["src/components/*"],
"@utils/*": ["src/utils/*"]
}
}
μ΄ μ€μ μ @components/MyComponent λ° @utils/myFunctionκ³Ό κ°μ λ³μΉμ μ¬μ©νμ¬ λͺ¨λμ κ°μ Έμ¬ μ μκ² ν΄μ€λλ€.
κ³ κΈ μ€μ : κΈ°λ³Έμ λμ΄μ
μ΄μ , νμ
μ€ν¬λ¦½νΈ κ°λ° κ²½νμ λμ± ν₯μμν¬ μ μλ κ³ κΈ tsconfig.json μ΅μ
λͺ κ°μ§λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
μ¦λΆ μ»΄νμΌ
νμ
μ€ν¬λ¦½νΈλ μ¦λΆ μ»΄νμΌμ μ§μνμ¬ λκ·λͺ¨ νλ‘μ νΈμ λΉλ νλ‘μΈμ€ μλλ₯Ό ν¬κ² ν₯μμν¬ μ μμ΅λλ€. μ¦λΆ μ»΄νμΌμ νμ±ννλ €λ©΄ incremental μ΅μ
μ trueλ‘ μ€μ νκ³ tsBuildInfoFile μ΅μ
μ μ§μ νμμμ€.
μμ:
"compilerOptions": {
"incremental": true,
"tsBuildInfoFile": ".tsbuildinfo"
}
tsBuildInfoFile μ΅μ
μ μ»΄νμΌλ¬κ° λΉλ μ 보λ₯Ό μ μ₯ν νμΌμ μ§μ ν©λλ€. μ΄ μ 보λ νμ λΉλ μ€μ λ€μ μ»΄νμΌν΄μΌ ν νμΌμ κ²°μ νλ λ° μ¬μ©λ©λλ€.
νλ‘μ νΈ λ νΌλ°μ€
νλ‘μ νΈ λ νΌλ°μ€λ μ½λλ₯Ό λ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ νλ‘μ νΈλ‘ ꡬ쑰νν μ μκ² ν΄μ€λλ€. μ΄λ λκ·λͺ¨ μ½λλ² μ΄μ€μ λΉλ μκ°κ³Ό μ½λ ꡬμ±μ κ°μ ν μ μμ΅λλ€. μ΄ κ°λ μ λν μ’μ λΉμ λ λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²μ λλ€ - κ° μλΉμ€λ λ 립μ μ΄μ§λ§ μνκ³μ λ€λ₯Έ μλΉμ€μ μμ‘΄ν©λλ€.
νλ‘μ νΈ λ νΌλ°μ€λ₯Ό μ¬μ©νλ €λ©΄ κ° νλ‘μ νΈμ λν΄ λ³λμ tsconfig.json νμΌμ λ§λ€μ΄μΌ ν©λλ€. κ·Έλ° λ€μ, λ©μΈ tsconfig.json νμΌμμ references μ΅μ
μ μ¬μ©νμ¬ μ°Έμ‘°ν΄μΌ ν νλ‘μ νΈλ₯Ό μ§μ ν μ μμ΅λλ€.
μμ:
{
"compilerOptions": {
...
},
"references": [
{ "path": "./project1" },
{ "path": "./project2" }
]
}
μ΄ μ€μ μ νμ¬ νλ‘μ νΈκ° ./project1 λ° ./project2 λλ ν 리μ μμΉν νλ‘μ νΈμ μμ‘΄ν¨μ λͺ
μν©λλ€.
컀μ€ν νΈλμ€ν¬λ¨Έ
컀μ€ν νΈλμ€ν¬λ¨Έλ₯Ό μ¬μ©νλ©΄ νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬μ μΆλ ₯μ μμ ν μ μμ΅λλ€. μ΄λ μ¬μ©μ μ μ μ½λ λ³ν μΆκ°, μ¬μ©νμ§ μλ μ½λ μ κ±° λλ νΉμ νκ²½μ λν μΆλ ₯ μ΅μ νμ κ°μ λ€μν λͺ©μ μΌλ‘ μ¬μ©λ μ μμ΅λλ€. μΌλ°μ μΌλ‘ i18n κ΅μ ν λ° νμ§ν μμ μ μ¬μ©λ©λλ€.
컀μ€ν
νΈλμ€ν¬λ¨Έλ₯Ό μ¬μ©νλ €λ©΄, μ»΄νμΌλ¬κ° νΈμΆν ν¨μλ₯Ό λ΄λ³΄λ΄λ λ³λμ μλ°μ€ν¬λ¦½νΈ νμΌμ λ§λ€μ΄μΌ ν©λλ€. κ·Έλ° λ€μ tsconfig.json νμΌμ plugins μ΅μ
μ μ¬μ©νμ¬ νΈλμ€ν¬λ¨Έ νμΌμ μ§μ ν μ μμ΅λλ€.
μμ:
{
"compilerOptions": {
...
"plugins": [
{ "transform": "./transformer.js" }
]
}
}
μ΄ μ€μ μ ./transformer.js νμΌμ 컀μ€ν
νΈλμ€ν¬λ¨Έλ‘ μ¬μ©νλλ‘ μ§μ ν©λλ€.
Files, Include, Exclude
compilerOptions μΈμλ, tsconfig.jsonμ λ€λ₯Έ μ΅μμ μ΅μ
λ€μ μ»΄νμΌ κ³Όμ μ ν¬ν¨λ νμΌμ μ μ΄ν©λλ€:
- files: μ»΄νμΌμ ν¬ν¨ν νμΌ κ²½λ‘μ λ°°μ΄μ λλ€.
- include: ν¬ν¨ν νμΌμ μ§μ νλ glob ν¨ν΄μ λ°°μ΄μ λλ€.
- exclude: μ μΈν νμΌμ μ§μ νλ glob ν¨ν΄μ λ°°μ΄μ λλ€.
μ΄λ¬ν μ΅μ λ€μ νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬κ° μ²λ¦¬ν νμΌμ μΈλ°νκ² μ μ΄ν μ μκ² ν΄μ€λλ€. μλ₯Ό λ€μ΄, ν μ€νΈ νμΌμ΄λ μμ±λ μ½λλ₯Ό μ»΄νμΌ κ³Όμ μμ μ μΈν μ μμ΅λλ€.
μμ:
{
"compilerOptions": { ... },
"include": ["src/**/*"],
"exclude": ["node_modules", "dist", "**/*.spec.ts"]
}
μ΄ μ€μ μ src λλ ν 리μ κ·Έ νμ λλ ν 리μ λͺ¨λ νμΌμ ν¬ν¨νλ©΄μ, node_modulesμ dist λλ ν 리μ νμΌ, κ·Έλ¦¬κ³ .spec.ts νμ₯μλ₯Ό κ°μ§ νμΌ(μΌλ°μ μΌλ‘ μ λ ν
μ€νΈμ μ¬μ©λ¨)μ μ μΈν©λλ€.
νΉμ μλ리μ€λ₯Ό μν μ»΄νμΌλ¬ μ΅μ
νλ‘μ νΈλ§λ€ μ΅μ μ κ²°κ³Όλ₯Ό μ»κΈ° μν΄ λ€λ₯Έ μ»΄νμΌλ¬ μ€μ μ΄ νμν μ μμ΅λλ€. λͺ κ°μ§ νΉμ μλ리μ€μ κ° μλ리μ€μ κΆμ₯λλ μ»΄νμΌλ¬ μ€μ μ μ΄ν΄λ³΄κ² μ΅λλ€.
μΉ μ ν리μΌμ΄μ κ°λ°
μΉ μ ν리μΌμ΄μ κ°λ°μ κ²½μ°, μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ μ»΄νμΌλ¬ μ€μ μ μ¬μ©νκ² λ©λλ€:
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "Node",
"jsx": "react-jsx",
"esModuleInterop": true,
"strict": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"sourceMap": true,
"outDir": "dist"
},
"include": ["src/**/*"],
"exclude": ["node_modules"]
}
μ΄ μ€μ μ React λλ λ€λ₯Έ μ μ¬ν νλ μμν¬λ₯Ό μ¬μ©νλ νλμ μΈ μΉ μ ν리μΌμ΄μ μ μ ν©ν©λλ€. μ΅μ ECMAScript κΈ°λ₯μ λμμΌλ‘ νκ³ , ES λͺ¨λμ μ¬μ©νλ©°, μ격ν νμ κ²μ¬λ₯Ό νμ±νν©λλ€.
Node.js λ°±μλ κ°λ°
Node.js λ°±μλ κ°λ°μ κ²½μ°, μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ μ»΄νμΌλ¬ μ€μ μ μ¬μ©νκ² λ©λλ€:
{
"compilerOptions": {
"target": "ESNext",
"module": "CommonJS",
"esModuleInterop": true,
"strict": true,
"sourceMap": true,
"outDir": "dist",
"resolveJsonModule": true
},
"include": ["src/**/*"],
"exclude": ["node_modules"]
}
μ΄ μ€μ μ CommonJS λͺ¨λ μμ€ν μ μ¬μ©νλ Node.js μ ν리μΌμ΄μ μ μ ν©ν©λλ€. μ΅μ ECMAScript κΈ°λ₯μ λμμΌλ‘ νκ³ , μ격ν νμ κ²μ¬λ₯Ό νμ±ννλ©°, JSON νμΌμ λͺ¨λλ‘ κ°μ Έμ¬ μ μλλ‘ νμ©ν©λλ€.
λΌμ΄λΈλ¬λ¦¬ κ°λ°
λΌμ΄λΈλ¬λ¦¬ κ°λ°μ κ²½μ°, μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ μ»΄νμΌλ¬ μ€μ μ μ¬μ©νκ² λ©λλ€:
{
"compilerOptions": {
"target": "ES5",
"module": "UMD",
"declaration": true,
"declarationMap": true,
"sourceMap": true,
"outDir": "dist",
"strict": true,
"esModuleInterop": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "**/*.spec.ts"]
}
μ΄ μ€μ μ λΈλΌμ°μ μ Node.js νκ²½ λͺ¨λμμ μ¬μ©ν μ μλ λΌμ΄λΈλ¬λ¦¬λ₯Ό λ§λλ λ° μ ν©ν©λλ€. ν₯μλ κ°λ°μ κ²½νμ μν΄ μ μΈ νμΌκ³Ό μμ€λ§΅μ μμ±ν©λλ€.
TSConfig κ΄λ¦¬ λͺ¨λ² μ¬λ‘
tsconfig.json νμΌμ κ΄λ¦¬ν λ μ λ
ν΄μΌ ν λͺ κ°μ§ λͺ¨λ² μ¬λ‘λ λ€μκ³Ό κ°μ΅λλ€:
- κΈ°λ³Έ μ€μ μΌλ‘ μμνκΈ°: κ³΅ν΅ μ€μ μ λ΄μ κΈ°λ³Έ
tsconfig.jsonνμΌμ λ§λ€κ³ , λ€λ₯Έ νλ‘μ νΈμμextendsμ΅μ μ μ¬μ©νμ¬ νμ₯ν©λλ€. - strict λͺ¨λ μ¬μ©νκΈ°: μ μ¬μ μΈ μ€λ₯λ₯Ό μ‘μλ΄κ³ λͺ¨λ² μ¬λ‘λ₯Ό κ°μ νκΈ° μν΄ strict λͺ¨λλ₯Ό νμ±νν©λλ€.
- λͺ¨λ ν΄μ μ€μ νκΈ°: import μ€λ₯λ₯Ό νΌνκΈ° μν΄ λͺ¨λ ν΄μμ μ μ νκ² μ€μ ν©λλ€.
- νλ‘μ νΈ λ νΌλ°μ€ μ¬μ©νκΈ°: νλ‘μ νΈ λ νΌλ°μ€λ₯Ό μ¬μ©νμ¬ μ½λλ₯Ό λ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ νλ‘μ νΈλ‘ ꡬ쑰νν©λλ€.
tsconfig.jsonνμΌμ μ΅μ μνλ‘ μ μ§νκΈ°:tsconfig.jsonνμΌμ μ κΈ°μ μΌλ‘ κ²ν νκ³ νλ‘μ νΈκ° λ°μ ν¨μ λ°λΌ μ λ°μ΄νΈν©λλ€.tsconfig.jsonνμΌμ λ²μ κ΄λ¦¬νκΈ°: λ€λ₯Έ μμ€ μ½λμ ν¨κ»tsconfig.jsonνμΌμ λ²μ κ΄λ¦¬μ 컀λ°ν©λλ€.- μ€μ λ¬ΈμννκΈ°:
tsconfig.jsonνμΌμ μ£Όμμ μΆκ°νμ¬ κ° μ΅μ μ λͺ©μ μ μ€λͺ ν©λλ€.
κ²°λ‘ : TypeScript μ€μ λ§μ€ν°νκΈ°
tsconfig.json νμΌμ νμ
μ€ν¬λ¦½νΈ μ»΄νμΌλ¬λ₯Ό μ€μ νκ³ λΉλ νλ‘μΈμ€λ₯Ό μ μ΄νλ κ°λ ₯ν λꡬμ
λλ€. μ¬μ© κ°λ₯ν μ΅μ
μ μ΄ν΄νκ³ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄, νμ
μ€ν¬λ¦½νΈ νλ‘μ νΈλ₯Ό μ΅μ μ μ±λ₯, μ μ§λ³΄μμ±, νΈνμ±μ μν΄ λ―ΈμΈ μ‘°μ ν μ μμ΅λλ€. μ΄ κ°μ΄λλ tsconfig.json νμΌμμ μ¬μ© κ°λ₯ν κ³ κΈ μ΅μ
μ λν ν¬κ΄μ μΈ κ°μλ₯Ό μ 곡νμ¬ νμ
μ€ν¬λ¦½νΈ κ°λ° μν¬νλ‘μ°λ₯Ό μμ ν μ μ΄ν μ μλλ‘ λμλ립λλ€. νμ μ΅μ μ 보μ μ§μΉ¨μ μ»μΌλ €λ©΄ 곡μ νμ
μ€ν¬λ¦½νΈ λ¬Έμλ₯Ό μ°Έμ‘°νλ κ²μ μμ§ λ§μμμ€. νλ‘μ νΈκ° λ°μ ν¨μ λ°λΌ, μ΄λ¬ν κ°λ ₯ν μ€μ λꡬμ λν μ΄ν΄μ νμ©λλ ν¨κ» μ±μ₯ν΄μΌ ν©λλ€. μ¦κ±°μ΄ μ½λ© λμΈμ!